package 题目集.数学;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 同余原理
 * https://www.acwing.com/problem/content/1236/
 */
public class 倍数问题 {
    /**
     * 暴力：三重循环
     * 优化分析：
     *      关键在于找到 (a1+a2+a3)%k==0的情况，即(a1%k+a2%k+a3%k)%k==0
     *      统计每个数的余数，找到相同余数最大的一个。
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[][] count = new int[k][3]; //记录每个余数的个数，最多记录3个
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = sc.nextInt();
        }
        Arrays.sort(nums);
        for (int[] ints : count) {
            Arrays.fill(ints, -1);
        }
        for (int i = 0; i < n; i++) {   //找出最大的一个
            int mod = nums[i] % k;
            count[mod][0] = i;
        }
        for (int i = 0; i < n; i++) {   //找出第二大的一个
            int mod = nums[i] % k;
            if (count[mod][0] > i) {
                count[mod][1] = i;
            }
        }
        for (int i = 0; i < n; i++) {   //找出第三大的一个
            int mod = nums[i] % k;
            if (count[mod][1] > i) {
                count[mod][2] = i;
            }
        }
        int res = 0;
        for (int a1 = 0; a1 < count.length; a1++) {
            for (int i1 = 0; i1 < 3; i1++) {
                if (count[a1][i1] == -1) continue;
                for (int a2 = 0; a2 < count.length; a2++) {
                    for (int i2 = 0; i2 < 3; i2++) {
                        if (count[a2][i2] == -1 || count[a2][i2] == count[a1][i1]) continue;
                        int a1a2 = nums[count[a1][i1]] + nums[count[a2][i2]];
                        int a3 = (k - ((a1a2) % k)) % k;
                        for (int i3 = 0; i3 < 3; i3++) {
                            if (count[a3][i3] == -1 || count[a3][i3] == count[a1][i1] || count[a3][i3] == count[a2][i2])
                                continue;
                            res = Math.max(a1a2 + nums[count[a3][i3]], res);
                        }
                    }
                }
            }
        }
        System.out.println(res);
    }
//    //暴力
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int k = sc.nextInt();
//        int[] nums=new int[n];
//        for (int i = 0; i < n; i++) {
//            nums[i]=sc.nextInt();
//        }
//        int res=0;
//        for (int i = 0; i < nums.length; i++) {
//            for (int j = i+1; j < nums.length; j++) {
//                for (int l = j+1; l < nums.length; l++) {
//                    int v = nums[i] + nums[j] + nums[l];
//                    if (v %k==0){
//                        res=Math.max(res, v);
//                    }
//                }
//            }
//        }
//        System.out.println(res);
//    }
}
